package com.yc.upload.web;


import com.yc.upload.vo.UploadProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

//将文件上传到执行目录，目录web访问路径必须是可以配置的
@RestController
@RequestMapping("upload")
public class UploadAction {

    @Autowired
    UploadProperties properties;

    //127.0.0.1/
    @PostMapping("one/{path}")
    public String upload(@RequestParam MultipartFile file,//用于将 HTTP 请求中的参数映射到方法的参数上。
                            @PathVariable String path) throws IOException { //用于将 URL 路径中的变量映射到方法的参数上

        String diskPath = properties.getMapping().get(path); //获取存储地址
        //获取上传文件的原始文件名，将其赋值给变量 filename。
        String filename = file.getOriginalFilename();
        //找到文件名中最后一个点（.）的索引位置，然后使用 substring 方法截取从该位置开始到字符串末尾的子字符串，即获取文件后缀名部分。
        String suffix = filename.substring(filename.lastIndexOf("."));
        String newFilename = UUID.randomUUID()+suffix;

        File fileObj = new File(diskPath,newFilename);
        file.transferTo(fileObj);
        return path + "/"+newFilename;

    }



    @PostMapping("list/{path}")
    public  List<String> upload(@RequestParam MultipartFile[] file,
                               @PathVariable String path) throws IOException {
        //TODO 多文件上传
        String diskPath = properties.getMapping().get(path); //获取存储地址
        List<String> list = new ArrayList<>();
        for (MultipartFile multipartFile : file) {
            //获取上传文件的原始文件名，将其赋值给变量 filename。
            String filename = multipartFile.getOriginalFilename();
            //找到文件名中最后一个点（.）的索引位置，然后使用 substring 方法截取从该位置开始到字符串末尾的子字符串，即获取文件后缀名部分。
            String suffix = filename.substring(filename.lastIndexOf("."));
            String newFilename = UUID.randomUUID()+suffix;

            File fileObj = new File(diskPath,newFilename);
            multipartFile.transferTo(fileObj);

            list.add(path + "/"+newFilename);

        }

        return list;
    }



}
